RCNN详解

您所在的位置:网站首页 fast rcnn详解 RCNN详解

RCNN详解

2023-11-05 00:52| 来源: 网络整理| 查看: 265

RCNN详解

RCNN即region proposals(候选区域) + CNN,是将CNN引入目标检测领域的开山之作(2014年),大大提高了目标检测的效果,在其后也是出现了更优异的变体Fast RCNN, Faster RCNN。

下文按照RCNN的工作过程依次介绍

1. 生成候选区域

获取候选区域最直接的方式就是滑窗法了,但是滑窗法需要用一个固定大小的小窗口遍历整张图片,因此其有很多的局限性。

所以一般都是使用一些候选区域(Region Proposal)算法,候选区域算法使用一些图像分割的算法来识别潜在的物体,然后合并一些相似(可能颜色或者纹理相近)的小区域,然后就能获得许多的候选区域,虽然可能这些候选区域和实际物体重合度不是很高,但是只要有一个候选区域符合要求即可,生成候选区域的算法一个重要的要求就是:要求较高的召回率(也叫查准率)。

目前已经有很多成熟的产生候选区域算法了,Selective Search(选择性搜索) 就是其中一个高效的算法。

UUEjF1.png

Selective Search(选择性搜索)的伪代码如下 (伪代码可以联系上图更容易理解) :

输入:图片image 输出:物体可能的位置集合L ------------------------------------- 使用图像分割算法获取初始候选区域R={r1,r2,...,rn}(**如图一**) 定义相似度集合S={} for earch 相邻区域(ri,rj) in R: 计算相似度s(ri,rj) S = S ∪ s(ri,rj) end for while S ≠ Ø:(**如图二**) 获取S中的最大相似度,s_max(ri,rj) = max(S) 合并该这两个区域 rt = ri ∪ rj 删除所有与ri和rj有关的相似度 s(ri,r*),s(rj,r*) 计算所有与rt相邻区域的相似度,并添加到集合S,S = S ∪ s(rt,r*) 将新生成的区域rt添加到候选区域R, R = R ∪ rt end while 从候选区域R获取所有可能的Bounding Boxes集合L return L -------------------------------------

当然这里只是非常简单的介绍了选择性搜索,详细的介绍和代码可以参考这两篇文章(上述两张图片也是来自该文章,无意冒犯):文章1,文章2

2. 特征提取

我们通过上述的生成候选区域算法得到了2000个左右的候选框,然后我们想要通过CNN获取其中的特征,但是许多的CNN网络对于输入图片的尺寸都是有固定的要求的,而我们获取的图片大小却不是固定的,这就需要我们对图片进行缩放处理。

2.1缩放处理

缩放处理有以下几种方法:

各项异性缩放

直接按照需要的尺寸强行缩放就是了

UUa5QS.png

各项同性缩放

有时图片扭曲后会对CNN的训练精度有影响,这时也可以考虑各项同性缩放,其中又分为两种:

A. 先扩充后后裁剪:在原图上将bounding box扩充到所需要的尺寸,然后在输入到CNN中

UUdAW6.png

B.先裁剪后扩充:先把bounding box图片裁剪处理,然后再使用bounding box中的颜色均值进行填充

UU0i26.png

2.2 CNN提取特征

假设我们采用结构比较简单的AlexNet,但是考虑到训练数据少,如果随机初始化参数从头开始训练,由于数据不够,最终的检测效果会比较差。所以我们使用已经训练好了的AlexNet进行迁移学习,进行fine-tuning训练,只需将最后一层替换掉即可,替换为N+1个输出的神经元(假设需要检测的物体有N类,还有一类表示背景,这一层参数使用随机初始化),然后我们就能对其进行训练了。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-651ZqmvH-1594719524982)(https://s1.ax1x.com/2020/07/14/UUc9mV.png)]

训练过程中我们需要一些正样本和一些负样本,人工标注的数据中标注了正确的bounding box,我们前面使用selective search算法挑选出了2000个左右的候选框,然后我我们将候选框中与人工标注的矩形框的重叠区域IoU大于0.5的标记为正样本,否则就标记为负样本。然后使用这些样本对CNN网络进行训练即可。

3. 类别判断

上述CNN训练完成后就已经能够对矩形框中的物体做出类别判断了,这里我们还需要使用SVM进行类别判断?这不是多此一举吗?原因是CNN需要大量的训练数据,训练数据过少容易出现过拟合的现象,而传统的SVM适用于少样本的训练,所以这里的类别判断才使用SVM。

我们前面训练的AlexNet最后一层在这里也是不需要使用的,我们只使用上一层输出的4096维的特征向量作为输入(其实就是将前面训练的神经网络当作特征提取器,而不直接使用其用于分类),我们为每个物体类训练一个svm分类器,然后将上述特征输入到SVM中即可。

4.位置精修

最后我们使用一个线性回归器对候选框进行精修,认为IoU大于0.6的为正样本,否则为负样本。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3